﻿using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Linq;
using System.Web;
using System.Text;
using DispatcherWebAppModel;

/// <summary>
/// Сводное описание для SuonUtil
/// </summary>
public class SuonUtil
{
    private bool _isDispEnable = false;
    private UserInfo userInfo { get { return (UserInfo)HttpContext.Current.Profile.GetPropertyValue("UserInfo"); } }

    public bool isDispEnable
    {
        get
        {
            if (userInfo == null) return false;

            if (userInfo.disp.Kontragent != -1)
            {
                return CheckLoginPass(userInfo.disp.Login, userInfo.disp.Pass);
            }
            else { return false; }
        }
    }

    private bool CheckLoginPass(string login, string pass)
    {
        DispatcherWebAppEntities context = new DispatcherWebAppEntities();
        try
        {
            var query = (from u in context.App_User
                         where u.Password == pass || u.UserName == login
                         select u).First();
            string source = pass;
            using (MD5 md5Hash = MD5.Create())
            {
                string hash = GetMd5Hash(md5Hash, source);
                return VerifyMd5Hash(md5Hash, source, hash);
            }
        }
        catch (Exception)
        {
            return false;
           // throw;
        }
    }

    public SuonUtil()
    {
        //
        // TODO: добавьте логику конструктора
        //
    }

    static string GetMd5Hash(MD5 md5Hash, string input)
    {

        // Convert the input string to a byte array and compute the hash.
        byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

        // Create a new Stringbuilder to collect the bytes
        // and create a string.
        StringBuilder sBuilder = new StringBuilder();

        // Loop through each byte of the hashed data 
        // and format each one as a hexadecimal string.
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }

        // Return the hexadecimal string.
        return sBuilder.ToString();
    }

    // Verify a hash against a string.
    static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
    {
        // Hash the input.
        string hashOfInput = GetMd5Hash(md5Hash, input);

        // Create a StringComparer an compare the hashes.
        StringComparer comparer = StringComparer.OrdinalIgnoreCase;

        if (0 == comparer.Compare(hashOfInput, hash))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

}